home *** CD-ROM | disk | FTP | other *** search
- #include "LayerManager.h"
- #include "MenuManager.h"
- #include "BaseWindowManager.h"
-
-
-
-
-
- extern MenuManager *gMenuManager;
-
-
-
-
-
- BaseWindowManager::BaseWindowManager(void)
- {
- fSuspended = false;
- }
-
-
-
-
-
- BaseWindowObject *BaseWindowManager::GetWindowObject(WindowPtr window)
- {
- BaseWindowObject *obj;
-
-
- obj = fWindowList.GetFirst();
- while(obj && (obj->fWindowID != window))
- obj = obj->next;
-
- return obj;
- }
-
-
- #pragma mark -
-
-
- void BaseWindowManager::DoAddWindow(Window *window)
- {
- BaseWindowObject *obj;
-
-
- obj = new BaseWindowObject;
- if (obj != NULL)
- {
- obj->fWindowID = window->fWindow;
- obj->fWindowObject = window;
- fWindowList.Append(obj);
- gMenuManager->DoWindowNotice(window,true);
- }
- }
-
-
-
-
-
- void BaseWindowManager::DoDeleteWindow(Window *window)
- {
- BaseWindowObject *obj;
-
-
- obj = GetWindowObject(window->fWindow);
- if (obj != NULL)
- {
- gMenuManager->DoWindowNotice(window,false);
- fWindowList.Delete(obj);
- delete obj;
- }
- }
-
-
-
-
-
- void BaseWindowManager::DoClick(Point where,UInt32 modifiers,WindowPtr window,SInt32 part)
- {
- Window *win = DoGetWindow(window);
- Window *top;
-
-
- // Don't let any other window have input or be able
- // to layer switch if a modal dialog is the topmost
- top = DoGetFrontWindow();
- if ((win != top) && ((top->fFlags & (kDialog | kModal)) == (kDialog | kModal)))
- return;
-
- if (win != NULL)
- win->DoClick(where,modifiers,part);
- }
-
-
-
-
-
- void BaseWindowManager::DoIdleTime(EventRecord *event,Point mouse,UInt32 modifiers)
- {
- BaseWindowObject *obj;
- WindowPtr window;
- Window *win;
- SInt32 part;
-
-
- if (!fSuspended)
- {
- win = NULL;
- if (!FindSystemWindow(mouse,&window))
- {
- part = FindWindow(mouse,&window);
- if (part == inContent)
- {
- win = DoGetWindow(window);
- if ((win != NULL) && (win->fFlags & kActive))
- win->DoUpdateCursor(mouse,modifiers);
- else
- win = NULL;
- }
- }
-
- if (win == NULL)
- SetCursor(&qd.arrow);
- }
-
- obj = fWindowList.GetFirst();
- while(obj != NULL)
- {
- obj->fWindowObject->DoIdleTime(event,mouse,modifiers);
- obj = obj->next;
- }
- }
-
-
-
-
-
- void BaseWindowManager::DoActivation(WindowPtr window,Boolean isActivating)
- {
- Window *win;
-
-
- win = DoGetWindow(window);
- if (win != NULL)
- {
- win->DoSetActivationState(isActivating);
- gMenuManager->DoWindowActivation(win,isActivating);
- }
- }
-
-
-
-
-
- void BaseWindowManager::DoSuspendResume(EventRecord *event,Boolean isSuspend)
- {
- BaseWindowObject *obj;
-
-
- obj = fWindowList.GetFirst();
- while(obj != NULL)
- {
- obj->fWindowObject->DoSetSuspensionState(event,isSuspend);
- obj = obj->next;
- }
-
- fSuspended = isSuspend;
- }
-
-
- #pragma mark -
-
-
- Window *BaseWindowManager::DoGetFrontWindow(void)
- {
- WindowPtr window;
- Window *win;
-
-
- // Floating windows are system windows
- // do this actually is correct
- window = FrontWindow();
- while(window != NULL)
- {
- if (((WindowPeek)window)->visible)
- {
- win = DoGetWindow(window);
- if (win != NULL)
- return win;
- }
-
- window = (WindowPtr)((WindowPeek)window)->nextWindow;
- }
-
- return NULL;
- }
-
-
-
-
-
- Window *BaseWindowManager::DoGetNextWindow(Window *window)
- {
- WindowPtr next;
-
-
- next = (WindowPtr)((WindowPeek)window->fWindow)->nextWindow;
- while(next != NULL)
- {
- window = DoGetWindow(next);
- if ((window != NULL) && ((WindowPeek)window)->visible)
- return window;
-
- next = (WindowPtr)((WindowPeek)next)->nextWindow;
- }
-
- return NULL;
- }
-
-
-
-
-
- Window *BaseWindowManager::DoGetWindow(WindowPtr window)
- {
- BaseWindowObject *obj;
-
-
- obj = GetWindowObject(window);
- return obj ? obj->fWindowObject : NULL;
- }
-